package org.chnxi.datastructures.tree;

/**
 * 顺序二叉树
 */
public class ArrayBinaryTree {

    private int[] array;

    public ArrayBinaryTree(int[] array){
        this.array = array;
    }

    /**
     * 前序遍历
     * @param index 数组的下标
     */
    public void printPreOrder(int index){
        //如果数组为空，或者length==0
        if(array == null || array.length == 0){
            System.out.println("数组为空，不能遍历");
            return;
        }

        //输出当前元素
        System.out.println("节点数据："+array[index]);
        //向左遍历
        int newIdx = index * 2 + 1;
        if(newIdx < array.length){
            printPreOrder(newIdx);
        }

        //向右遍历
        newIdx = index * 2 + 2;
        if(newIdx < array.length){
            printPreOrder(newIdx);
        }

    }

    /**
     * 默认从0开始遍历
     */
    public void printPreOrder(){
        this.printPreOrder(0);
    }

    /**
     * 中序遍历
     * @param index 数组的下标
     */
    public void printInfixOrder(int index){
        //如果数组为空，或者length==0
        if(array == null || array.length == 0){
            System.out.println("数组为空，不能遍历");
            return;
        }

        //向左遍历
        int newIdx = index * 2 + 1;
        if(newIdx < array.length){
            printInfixOrder(newIdx);
        }

        //输出当前元素
        System.out.println("节点数据："+array[index]);

        //向右遍历
        newIdx = index * 2 + 2;
        if(newIdx < array.length){
            printInfixOrder(newIdx);
        }
    }

    /**
     * 后序遍历
     * @param index
     */
    public void printPostOrder(int index){
        //如果数组为空，或者length==0
        if(array == null || array.length == 0){
            System.out.println("数组为空，不能遍历");
            return;
        }

        //向左遍历
        int newIdx = index * 2 + 1;
        if(newIdx < array.length){
            printPostOrder(newIdx);
        }

        //向右遍历
        newIdx = index * 2 + 2;
        if(newIdx < array.length){
            printPostOrder(newIdx);
        }

        //输出当前元素
        System.out.println("节点数据："+array[index]);
    }

}